package com.cn.io.nio;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class FileChannelNio {

    public static void main(String[] args) throws IOException {
        /*FileInputStream in = new FileInputStream("D:\\opt\\def.txt");
        FileOutputStream out = new FileOutputStream("D:\\opt\\abc.txt");
        byte[] bytes = new byte[1024];
        while (in.read(bytes) != -1) {
            out.write(bytes);
        }
        out.flush();
        in.close();
        out.close();*/
        FileChannel in = new FileInputStream("D:\\opt\\def.txt").getChannel();
        FileChannel out = new FileOutputStream("D:\\opt\\abc.txt").getChannel();
        ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
        while (in.read(byteBuffer) != -1) {
            byteBuffer.flip(); //做好让人读的准备
            out.write(byteBuffer);
            //一旦要用从缓冲器中读取数据的话，那么就要调用缓冲器的flip()方法，让它做好让别人读取字节的准备。
            // 那么写完数据以后就要调用缓存器的clear()方法对所有的内部的指针重新安排，
            // 以便缓冲器在另一个read()操作期间能够做好接受数据的准备。然后数据就会从源文件中源源不断的读到了目标文件中。
            byteBuffer.clear();
        }
        in.close();
        out.close();
    }
}
